/*
 双十一众多商品进行打折销售
 小明想购买自己心仪的一些物品
 但由于购买资金限制
 所以他决定从众多心仪商品中购买三件
 而且想尽可能得花完资金
 现在请你设计一个程序 计算小明尽可能花费的最大资金数

 输入描述：
   输入第一行为一维整型数组m
   数组长度小于100
   数组元素记录单个商品的价格
   单个商品加个小于1000

   输入第二行为购买资金的额度r
   r<100000

 输出描述：
    输出为满足上述条件的最大花费额度

  注意：如果不存在满足上述条件的商品请返回-1

 示例：
    输入
     23,26,36,27
     78
    输出
     76
    说明：
     金额23、26、27得到76而且最接近且小于输入金额78

  示例：
      输入
      23,30,40
      26
      输出
       -1
      说明
      因为输入的商品无法满足3件之和小于26
      故返回-1

  输入格式正确无需考虑输入错误情况

  */
const test = (input) => {
    let inputArr = input.split('\n')
    let [prices, r] = inputArr
    let pricesArr = prices.split(",")
    console.log(pricesArr, r)
    let len = pricesArr.length
    let stack = []
    let _pick = (arr, t) => {
        if (t === 0) {
            stack.push(arr)
        } else {
            arr.forEach((_, i) => {
                let arr2 = arr.slice(0)
                arr2.splice(i, 1)
                _pick(arr2, t - 1)
            })
        }
    }

    _pick(pricesArr, len - 3)
    console.log(stack)

    let sums = stack.map(t => t.map(t => parseInt(t)).reduce((a, b) => a + b, 0))



    console.log(sums)

    let seq = sums.map(t => {
        return {
            t,
            offset: r - t
        }
    })
    let item = seq.sort((a, b) => {

        if (a.offset > b.offset) {
            return 1
        } else if (a.offset < b.offset) {
            return -1
        } else {
            return 0
        }

    }).find(t => t.offset > 0)

    console.log(item ? item.t : -1)



}

test(`23,26,36,27
78`)
test(`23,30,40
26`)